# 正常的流程
# 1. 公安系统拍照录入人脸信息 （建立人脸数据库）
# 2. 过闸机，人脸检测
# 3. 将检测到的人脸 与 人脸数据库进行匹配
# 4. 匹配成功，输出人脸识别的结果 “张三”


#人脸信息录入
import cv2
img = cv2.imread("../images/lena.png")
x, y, w, h = cv2.selectROI("img roi", img)
img_roi = img[y:y+h, x:x+w]
name = input("请输入要录入的人脸的名称")
cv2.imwrite(f"./{name}.png", img_roi)
"""

"""
#人脸检测
"""


"""
#利用模板匹配，实现人脸识别
import os.path
import cv2
import numpy as np

# 1. 读取原图 和 模板图
img = cv2.imread("../images/lena.png")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print(img_gray.shape)
temp = cv2.imread("./lena_face.png")
name, sub = os.path.splitext("lena_face.png")
print(name, sub)
h, w, _ = temp.shape
temp_gray = cv2.cvtColor(temp, cv2.COLOR_BGR2GRAY)
print(temp_gray.shape)

# 2. 进行模板匹配
ret = cv2.matchTemplate(
    img_gray,
    temp_gray,
    cv2.TM_CCOEFF_NORMED        # 匹配方法（归一化相关系数匹配法）
)
print(ret.shape)

# （归一化相关系数匹配法） 值越大 匹配度越高
# 3. 设置阈值，筛选结果
loc = np.where(ret>=0.95)   # ret>=0.95 相似度达到95%以上
print(loc)


# 4. 根据筛选结果，在原图上圈出来
for x,y in zip(loc[1], loc[0]):
    cv2.rectangle(
        img,
        (x,y),
        (x+w, y+h),
        (0,0,255),
        2
    )
    cv2.putText(
        img,
        text=name,
        org=(x,y-15),#位置
        fontFace=cv2.FONT_HERSHEY_SIMPLEX,#字体
        fontScale=1,
        color=(255,0,0)
    )

cv2.imshow("img", img)
cv2.waitKey(0)

